// 1. 导入axios组件
import axios from "axios";

// 导入el组件
import ElementUI from 'element-ui'

// 导入路由组件
import router from '@/router'

import glo_loading from '@/loadings/index.js';
import {routerLoading} from '@/loadings/loadingConfig.js';
import {apiLoading} from '@/loadings/loadingConfig.js';

import {apipath} from '@/util/apimain'

const service = axios.create({// get post delete put
  baseURL: apipath+'/gdones.gpt',
  timeout:30000
})

// 加载动画对象
let lodingObj;

// http request 请求拦截器
// 创建拦截器的对象必须是调用请求的axios对象
service.interceptors.request.use(config => {
  // 在发送请求之前做些什么

  // 只要是所有的请求都需要发送的参数需要添加，就用请求拦截器实现
  //在请求发送之前拼接上token
  config.headers.token = window.localStorage.getItem("token");

  // 开启加载动画
  apiLoading ? glo_loading.loadingShow() : '';


  return config;
}, error => {
  // 对请求错误做些什么
  // 错误关闭动画
  apiLoading ? glo_loading.loadingHide() : '';
  return Promise.reject(error);

});

// 响应拦截器
service.interceptors.response.use(response => {
  // 响应成功关闭动画
  apiLoading ? glo_loading.loadingHide() : '';
  if(response.status==200){// 请求发送响应成功

    if(response.data.code=="-1"){// 认证失败
      ElementUI.Notification.error({
        title: '系统异常',
        message: response.data.msg+",请重新登录"
      });
      router.push("/");
    }else if(response.data.code=="0000"){
      if(response.data.msg!=null&&response.data.msg!=''){
        ElementUI.Message.success(response.data.msg);
      }

    }else if(response.data.code=="9999"){
      ElementUI.Message.error(response.data.msg);
    }

    return response.data;
  }else{
    // 响应异常关闭动画
    apiLoading ? glo_loading.loadingHide() : '';
    ElementUI.Notification.error({
      title: '系统异常',
      message: error.response.data.msg+",请联系管理员"
    });
    return response.data;
  }



},error => { // 后端没有处理异常或者是接口请求错
  apiLoading ? glo_loading.loadingHide() : '';
  if (error.response) {

    // 后端代码异常
    // 1. 跳转到一个500的页面，显示500错误信息，描述一个能够让客户理解的界面

    ElementUI.Notification.error({
      title: '系统异常',
      message: error.response.data.msg+",请联系管理员"
    });


    // 返回接口返回的错误信息
    return error.response.data;
  }
});

export default service;
